import cv2 #opencv读取的格式是BGR
import numpy as np
import matplotlib.pyplot as plt#Matplotlib是RGB


# cv2.findContours(img,mode,method)¶
# mode:轮廓检索模式

# RETR_EXTERNAL ：只检索最外面的轮廓；
# RETR_LIST：检索所有的轮廓，并将其保存到一条链表当中；
# RETR_CCOMP：检索所有的轮廓，并将他们组织为两层：顶层是各部分的外部边界，第二层是空洞的边界;
# RETR_TREE：检索所有的轮廓，并重构嵌套轮廓的整个层次;

# method:轮廓逼近方法
# CHAIN_APPROX_NONE：以Freeman链码的方式输出轮廓，所有其他方法输出多边形（顶点的序列）。
# CHAIN_APPROX_SIMPLE:压缩水平的、垂直的和斜的部分，也就是，函数只保留他们的终点部分

#img = cv2.imread('contours.png', cv2.COLOR_BGR2GRAY)
img = cv2.imread('contours.png')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)


ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
cv2.imshow("thresh", thresh)
cv2.waitKey(0)    
cv2.destroyAllWindows()

(contours, hierarchy) = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)

#传入绘制图像，轮廓，轮廓索引，颜色模式，线条厚度
# 注意需要copy,要不原图会变。。。
draw_img = img.copy()
res = cv2.drawContours(draw_img, contours, -1, (0, 0, 255), 2)
cv2.imshow("res", res)
cv2.waitKey(0)    
cv2.destroyAllWindows()

cnt = contours[0]

#面积
print(cv2.contourArea(cnt))

#周长，True表示闭合的
print(cv2.arcLength(cnt,True))

